package com.niit.util;

import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

/**
 * MybatisUtil类，用于根据mybatis配置文件的配置创建会话工厂实例
 * <br>SqlSessionFactory
 *
 * @author NIIT
 */
public class MybatisUtil {

    private static SqlSessionFactory sqlSessionFactory;

    //一个程序中，会话工厂只创建一个实例即可，可以考虑使用静态代码块实例化会话工厂
    static {
        try {
            //Mybatis提供Resources类，可以加载外部资源文件
            //Resources类的getResourceAsStream()等方法可用于加载指定的资源文件，返回一个InputStream对象，用于操作文件数据
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            //SqlSessionFactoryBuilder类提供方法帮我们创建SqlSessionFactory实例 
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            //调用SqlSessionFactoryBuilder类的build()方法可以创建一个SqlSessionFactory实例
            //传入一个关联mybatis配置文件的InputStream对象，这样SqlSessionFactoryBuilder可以根据配置文件配置打造会话工厂
            sqlSessionFactory = builder.build(is);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
    
    public static SqlSessionFactory getSqlSessionFactory(){
        return sqlSessionFactory;
    }
    
    //创建会话工厂是为了获取会话实例，所以可以自己添加一个方法用于获取会话对象
    public static SqlSession openSession(){
        return sqlSessionFactory.openSession();
    }
}
